home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / nrpas13.arc / MOMENT.PAS < prev    next >
Pascal/Delphi Source File  |  1991-05-01  |  997b  |  41 lines

  1. PROCEDURE moment(data: narray; n: integer;
  2.        VAR ave,adev,sdev,svar,skew,curt: real);
  3. (* Programs using routine MOMENT must define the type
  4. TYPE
  5.    narray = ARRAY [1..n] OF real;
  6. in the calling routine *)
  7. VAR
  8.    j: integer;
  9.    s,p: real;
  10. BEGIN
  11.    IF (n <= 1) THEN BEGIN
  12.       writeln('pause in MOMENT - n must be at least 2'); readln
  13.    END;
  14.    s := 0.0;
  15.    FOR j := 1 TO n DO s := s+data[j];
  16.    ave := s/n;
  17.    adev := 0.0;
  18.    svar := 0.0;
  19.    skew := 0.0;
  20.    curt := 0.0;
  21.    FOR j := 1 TO n DO BEGIN
  22.       s := data[j]-ave;
  23.       adev := adev+abs(s);
  24.       p := s*s;
  25.       svar := svar+p;
  26.       p := p*s;
  27.       skew := skew+p;
  28.       p := p*s;
  29.       curt := curt+p
  30.    END;
  31.    adev := adev/n;
  32.    svar := svar/(n-1);
  33.    sdev := sqrt(svar);
  34.    IF (svar <> 0.0) THEN BEGIN
  35.       skew := skew/(n*sdev*sdev*sdev);
  36.       curt := curt/(n*sqr(svar))-3.0
  37.    END ELSE BEGIN
  38.       writeln('pause in MOMENT - no skew/kurtosis when variance = 0'); readln
  39.    END
  40. END;
  41.